package com.yida.gwj.deposit.service;

import com.yida.gwj.deposit.domain.GwjDepositBusiness;
import com.yida.gwj.deposit.domain.GwjDepositBusinessLog;
import com.yida.gwj.deposit.domain.dto.GwjDepositPageDTO;
import com.yida.gwj.deposit.domain.dto.GwjOwnerDepositDetailDTO;
import com.yida.gwj.deposit.domain.request.*;

import java.util.List;

/**
 * @Description 业主缴存（缴存业务管理模块）Service接口
 * @Author wws
 * @Date 2023-02-14
 */
public interface IGwjOwnerDepositBusinessService {

    /**
     * 业主缴存（保存）
     * @param saveSubmitRequest 保存参数
     * @return
     */
    Long saveBusiness(GwjOwnerDepositSaveSubmitRequest saveSubmitRequest);

    /**
     * 业主缴存（签署意见）
     * @param businessLog 意见请求参数
     */
    void signOpinion(GwjDepositBusinessLog businessLog);

    /**
     * 业主缴存（回退）
     * @param businessLog 回退参数
     */
    void fallback(GwjDepositBusinessLog businessLog);

    /**
     * 业主缴存（业务作废）
     * @param gwjDepositBusinessLog 业务作废参数
     */
    void invalidBusiness(GwjDepositBusinessLog gwjDepositBusinessLog);

    /**
     * 业主缴费（送件）
     * @param businessLog 送件参数
     */
    void send(GwjDepositBusinessLog businessLog);

    /**
     * 业主缴存（生成流水）
     * @param bizId 业务主键
     */
    void genFinanceStatement(Long bizId);

    /**
     * 业务缴存（财务对账）
     * @param bizId 业务主键
     */
    void financeCheck(Long bizId);

    /**
     * 业主缴存（修改业务信息）
     * @param saveSubmitRequest 修改参数
     */
    void update(GwjOwnerDepositSaveSubmitRequest saveSubmitRequest);

    /**
     * 业主缴存（提交）
     * @param saveSubmitRequest 提交参数
     */
    void submitBusiness(GwjOwnerDepositSaveSubmitRequest saveSubmitRequest);

    /**
     * 业主缴存（删页）
     * @param bizId 业务主键
     */
    void deleteBusinessData(Long bizId);

    /**
     * 业主缴存（删除案例）
     * @param bizId 业务主键
     */
    void removeBusiness(Long bizId);

    /**
     * 分页查询
     * @param gwjDepositBusiness 查询参数
     * @return 业主缴存分页对象
     */
    List<GwjDepositPageDTO> getPage(GwjDepositBusiness gwjDepositBusiness);

    /**
     * 查询详情
     * @param bizId 业务主键
     * @return 业主缴存详情对象
     */
    GwjOwnerDepositDetailDTO getDetail(Long bizId);

    /**
     * 主页提交
     * @param businessLog
     */
    void indexSubmit(GwjDepositBusinessLog businessLog);

    /**
     * 选择小区
     * @param communityRequest 小区业务参数
     */
    void chooseCommunity(GwjOwnerDepositChooseCommunityRequest communityRequest);

    /**
     * 修改业务楼栋信息
     * @param buildRequest 楼栋业务参数
     */
    void editBuild(GwjOwnerDepositBusinessBuildRequest buildRequest);

    /**
     * 修改业务房屋信息
     * @param editHouseRequest 房屋业务信息
     */
    void editHouse(GwjOwnerDepositBusinessHouseRequest editHouseRequest);

    /**
     * 选择楼栋
     * @param chooseBuildRequest 选择参数
     */
    void chooseBuilds(GwjOwnerDepositChooseBuildRequest chooseBuildRequest);

    /**
     * 删除楼栋
     * @param bizId 业务主键
     * @param bizBuildIds 业务楼栋主键
     */
    void deleteBuildData(Long bizId, Long[] bizBuildIds);

    /**
     * 选择房屋
     * @param chooseHouseRequest 选择参数
     */
    void chooseHouses(GwjOwnerDepositChooseHouseRequest chooseHouseRequest);

    /**
     * 删除业务房屋
     * @param bizId 删除参数
     * @param bizHouseIds 业务房屋主键
     */
    void deleteHousesData(Long bizId, Long[] bizHouseIds);

    /**
     * 修改业务金额信息
     * @param moneyRequest 修改参数
     */
    void editMoney(GwjOwnerDepositEditMoneyRequest moneyRequest);
}
